perm filename GEOMED[0,BGB]4 blob
sn#102641 filedate 1974-05-19 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 3.0 GEOMED AS A GEOMETRIC MODELING COMMAND LANGUAGE.
C00005 00003 3.1 Euler Routines.
C00009 00004 TABLE OF EULER ROUTINES
C00013 00005 3.2 Euclidean Routines.
C00015 00006 TABLE OF EUCLIDEAN ROUTINES.
C00017 00007 3.3 Image Synthesis Routines. {perspective projection}
C00018 ENDMK
C⊗;
3.0 GEOMED AS A GEOMETRIC MODELING COMMAND LANGUAGE.
3.0 Introduction.
3.1 Euler Routines.
3.2 Euclidean Routines.
3.3 Image Synthesis Routines.
3.0 Introduction.
GEOMED (Geometric Editor) is a system of subroutines for
manipulating winged edge polyhedra. The system has two distinctly
different manifestations: first, it appears as an interactive 3-D
drawing program and second, it appears as a geometric modeling
command language. It is the latter manifestation along with some of
the details of implementation that is the subject of this chapter.
GEOMED as an interactive drawing program is documented in reference
(**). As a language, GEOMED is all semantics with no syntax of its
own; there are about two hundred GEOMED subroutines which take from
zero to four arguments, return one or no values and which usually
have considerable side effects on the data structures. The
subroutines can be grouped into four groups: utility routines, Euler
routines, Euclidean Routines and image synthesis routines. The
utility routines (which will not be further detailed) include
input/output, trigonmetric functions, memory management, a command
scanner and device dependent display routines. In general, the
Euler routines perform topological operations on links, the
Euclidean routines perform geometric computations on data and the
image synthesis routines perform photographic simulations on the
model as a whole.
As in the previous chapter, the language notation will
continue to be similar in appearance to ALGOL.
3.1 Euler Routines.
The Euler routines of GEOMED are based on the idea that an
arbitrary polyhedron can be created in steps that always maintain the
Euler relation: F-E+V=2*(B-H). Topologically, a simply connected
Eulerian polyhedral graph can be built up with only four creation
primitives which I have called: MKBFV, MKEV, MKFE and GLUEE. The
prefixes "MK" and "KL", stand for "make" and "kill". The MKBFV
primitives takes no arguments and creates a degenerate point
polyhedron of one vertex, one face and one body which is the minimal
non-zero binding satisfying the equation. The MKEV creates a new edge
and a new vertex attached to the given vertex in the given face. The
MKFE creates a new face and a new edge, the new edge is placed
between the two given vertices. Finally the GLUEE creates a handle or
kills a body node by placing a new edge between two given vertices
and by removing the second of the two given faces. Complementing the
maker primitives there are four kill primitives called KLBFEV, KLEV,
KLFE and UNGLUEE. Completing the set, the ESPLIT routine (mentioned
in section **) is classified as an alternate form of MKEV.
In principle, the advantages of the pure Euler primitives are
that they assure valid topology, full generality, reasonable
simplicity and they achieve a semantic level slightly higher than
that of manipulating the polyhedral nodes and links directly.
However, the Euler primitives only satisfy the first of the five
conditions defining a solid polyhedron; leaving no particular
restrictions on surface orientation, face/vertex trivalence, face
planarity, face convexity and surface self intersection. In practice,
the Euler primitives serve as a topological foundation for coding
further routines which embody more geometry.
TABLE OF EULER ROUTINES
---------------------------------------------------------------------
B. EULER MAKE PRIMITIVES:
1. BNEW ← MKBFV; Makes point polyhedron: 1 face, 1 vertex.
2. VNEW ← MKEV(F,V); Makes new edge and vertex such that:
VNEW = NVT(ENEW); V = PVT(ENEW);
VNEW ← ESPLIT(E); Makes new edge and vertex...
3. ENEW ← MKFE(V1,F,V2); Makes new face and edge such that:
FNEW = NFACE(ENEW); F = PFACE(ENEW);
V1 = PVT(ENEW); V2 = NVT(ENEW).
4. ENEW ← GLUEE(F1,V1,F2,V2); Makes new edge, Kills F2,
and makes a hole or kills a body.
V1 = PVT(ENEW); V2 = NVT(ENEW).
C. EULER KILL PRIMITIVES:
1. QNEW ← KLBFEV(Q); Kills B.F.E.V. entity. {FKILL},{EKILL}
2. F ← KLFE(E); Kills E and NFACE(E). Returns PFACE(E).
3. E ← KLEV(V); Kills V and PED(V). Returns other E of V.
V ← KLEV(E); Kills E and NVT(E). Returns PVT(E).
4. FNEW ← UNGLUE(E); Kills E; makes F; Returns the new face,
and kills a hole or makes a body.
D. FURTHER EULER ROUTINES:
1. BODY ← GLUE(FACE1,FACE2); Removes face1 and face2.
2. QNEW ← MKCOPY(ENTITY); Copy an entity.
3. FACE ← SWEEP(FACE,FLAG); Make prism on face (or sweep wire).
4. FACE ← ROTCOM(FACE); Rotation sweep wire face completion.
5. PEAK ← PYRAMID(FV); Make pyramid on a face (or vertex).
6. BODY ← FVDUAL(BODY); Apply face/vertex duality to a body.
7. BNEW ← MKCUBE(DX,DY,DZ); Create right rectangular prism.
8. BNEW ← MKCYLN(RADIUS,N,DZ); Create cylinder approximation.
9. BNEW ← MKBALL(RADIUS,M,N); Create sphere approximation.
---------------------------------------------------------------------
3.2 Euclidean Routines.
The Euclidean routines of GEOMED fall into four groups:
transformations, metrics, frame makers and space simulators.
The Euclidean transformation primitives are translation, rotation,
dilation and reflection (following Klein's Erlangen Program, 1872).
The Euclidean metric routines compute distances, angles, areas,
volumes and inertia tensors; while the frame routines create or alter
frame nodes. Fundamental to these routines is the curious fact that a
frame node has two interpretations: it may be used to specify a
coordinate systems or it may be used to represent a Euclidean
transformation.
The Euclidean routines involving frames can be explained in
terms of the 4-D homogeneous coordinates usual to computer graphics
then both frame of reference and transformations can be viewed as a
tensor. A tensor is a geometric object linear vector function.
TABLE OF EUCLIDEAN ROUTINES.
---------------------------------------------------------------------
EUCLIDEAN TRANSFORMATIONS
TRANS ← TRANSL(XWD(FRAME,BODY),DX,DY,DZ);
TRANS ← ROTATE(XWD(FRAME,BODY),WX,WY,WZ);
TRANS ← SHRINK(XWD(FRAME,BODY),KX,KY,KZ);
TRANS ← APTRAN(ENTITY,TRANS);
TRANS ← INTRAN(TRAN);
FRAME MAKERS
TRANS ← MKROT1(PAN,TILT,SWING); MAKE FROM EULER ANGLES.
TRANS ← MKFFRM(FACE); MAKE FACE FRAME.
TRANS ← MKQFRM(WX,WY,WZ); MAKE FROM ROTATION VECTOR.
FRAME ORTHONORMALIZATION.
NORM(FRAME) ;NORMALIZATION TO UNIT VECTORS.
ORTHO1(FRAME) ;ORTHOGONALIZE BY WORST CASE.
ORTHO2(FRAME) ;ORTHOGONALIZE BY K ← (I CROSS J), J ← (K CROSS I).
METRIC ROUTINES.
DETERM(FRAME)
ANGL3V(V1,V2,V3)
DISTANCE(ENTITY,ENTITY);
3.3 Image Synthesis Routines. {perspective projection}